package top.itaso.app.room.repository;

import androidx.lifecycle.LiveData;

import org.jetbrains.annotations.NotNull;

import java.util.List;

import top.itaso.app.room.entity.UserEntity;

/**
 * @Description:
 * @Author itsdf07
 * @E-Mail 923255742@qq.com
 * @Gitee https://gitee.com/itsdf07
 * @Date 2022/1/10
 */
public interface IUserRepository {
    /**
     * 查询所有用户
     *
     * @return 所有用户信息
     */
    LiveData<List<UserEntity>> querys();

    /**
     * 查询指定 username（username 为主键，存在，则数据只会有一条，故无需 LIMIT 限制）
     *
     * @param username 匹配的用户
     * @return 匹配到的单一用户
     */
    UserEntity queryUserName(String username);

    /**
     * 查询指定范围的用户
     *
     * @param usernames 范围用户
     * @return 匹配到的用户集合
     */
    List<UserEntity> querysInUserNames(String[] usernames);

    /**
     * 精准匹配一个用户的密码
     *
     * @param username 用户
     * @param password 密码
     * @return 匹配到的单一用户
     */
    UserEntity queryUser(String username, String password);

    /**
     * 模糊匹配用户名称：displayName
     *
     * @param displayName 模糊匹配的用户
     * @return 匹配到的用户集合
     */
    List<UserEntity> querysLikeDisplayName(String displayName);

    /**
     * OnConflictStrategy.REPLACE：如果有数据冲突（唯一约束值相同），则进行替换，其中只增加部分则以新增值为准
     *
     * @param users 新增的用户集
     * @return 数据插入行的ID列表
     */
    long[] inserts(UserEntity... users);

    /**
     * 新增用户，OnConflictStrategy.REPLACE：如果有数据冲突（唯一约束值相同），则进行替换为新记录
     *
     * @param user 新增用户
     * @return 数据插入行的ID
     */
    long insert(UserEntity user);

    int delete(UserEntity user);

    long update(UserEntity user);

    /**
     * 修改昵称
     *
     * @param uid
     * @param displayName
     */
    int updateDisplayName(String uid, String displayName);

    /**
     * 修改用户状态
     *
     * @param uid
     * @param state
     */
    int updateState(String uid, int state);
}
